
package com.qdu.controller;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import com.qdu.entity.Hr;
import com.qdu.mapper.HrMapper;
import com.qdu.service.HrService;
import com.qdu.util.DateUtil;


@Controller
@CrossOrigin
@RequestMapping("/hrt")
public class HrController {
	
	@Autowired
	HrService hs;
	
	@Autowired
	HrMapper mapper;
	
	@Autowired
	private PasswordEncoder passwordEncoder;
	
	@PostMapping("/update")
	@ResponseBody
	public int update(@RequestParam("hid") String hid,@RequestParam("hpwd") String hpwd) {
		String code = passwordEncoder.encode(hpwd);
		return mapper.update(code, hid)+mapper.updaterole(code, hid);
	}
	
	@PostMapping("/add")
	@ResponseBody
	public String addhr(@RequestParam Map<String,Object> h,@RequestParam("himg") MultipartFile himg) throws IllegalStateException, IOException {
		String encryptedPassword=passwordEncoder.encode(h.get("hpwd").toString());
		
		
		String oldName=himg.getOriginalFilename();
		
		String newName=UUID.randomUUID().toString().replace("-","")
				       +oldName.substring(oldName.lastIndexOf("."));
		
	//	System.out.println("文件新名称："+newName); 
		String today=DateUtil.getToday();
		//获取/static/img的真实路径
		String realPath=new String("src/main/resources/static/himg");//ResourceUtils.getURL("classpath:static/static/uimg").getPath();
		System.out.println("/static/img的真实路径："+realPath);

		
		File folder=new File(realPath+"/"+today);
		if(!folder.exists()) //如果文件夹不存在，则创建文件夹，如果存在，不重复创建
			folder.mkdirs(); //创建文件夹
		
		//调用transferTo()方法将接受的文件转移到指定文件
		//这里需要用一个File对象指定文件所在目录和文件名
		himg.transferTo(new File(folder,newName));
		String path = "himg/"+today+"/"+newName;
		h.remove("himg");
		h.remove("hpwd");
		h.put("hpwd", encryptedPassword);
		h.put("himg", path);
		
		
		int row = mapper.addHr(h);
		if(row>0)
		{
			mapper.addrole(h.get("hid").toString(), encryptedPassword);
			return "注册成功，等待审核";
		}
		else
			return "注册失败";
	}
	
	@GetMapping("/registerBuss")
	public String toBussre() {
		return "bussRegister";
	}
	
	@PostMapping("/getone")
	@ResponseBody
	public Hr getOne(String hid) {
		return hs.getone(hid);
	}
	
	@PostMapping("/getresume")
	@ResponseBody
	public List<Map<String,Object>> getresume(String hid) {
		return mapper.getresumeListByhr(hid);
	}
	
	@RequestMapping("/dloadresume")
	public ResponseEntity<byte[]> download(String path) throws IOException {
		
		//指定要下载的文件的真实路径
		//如果要获取src/main/resources目录下files/transcript.xlsx文件的路径，可使用:
	    //String realPath=ResourceUtils.getURL("classpath:files/transcript.xlsx").getPath();
		String realPath=path;
		String[] stra = realPath.split("/");
		//调用FileUtils类的readFileToByteArray()将文件内容读取到一个字节数组
		//这里读取realPath表示的文件的内容到data数组
		byte[] data=FileUtils.readFileToByteArray(new File(realPath));
		
		//如果希望返回响应的所有信息：响应内容、响应报头、状态码，可以使用
		//一个ResponseEntity对象封装响应的所有信息
		//ResponseEntity是个泛型类，类型参数表示的是发送的响应数据的类型
		//这里调用带3个参数的构造函数创建ResponseEntity对象
		//参数1： 要发送给客户端的数据
		//参数2： 响应报头
		//参数3： 状态码
		
		//创建一个HttpHeaders对象，用于设置响应报头有哪些
		HttpHeaders headers=new HttpHeaders();
		//content-disposition报头用于指定响应数据以什么形式呈现给客户端
		//默认值是inline，说明响应数据作为响应内容显示
		//attachment说明响应数据作为单独的附件显示给客户端，通常会成为可以下载的文件
		//filename指定下载的文件的名称
		headers.add("content-disposition", "attachment;filename="+stra[6]+".doc");
		
		ResponseEntity<byte[]> responseEntity
		=new ResponseEntity<byte[]>(data,headers,HttpStatus.OK);
		
		return responseEntity;
	}
	
	//Hr查询收到的简历时触发正在审核简历 statu改为1
	@PostMapping("/alterstatuing")
	@ResponseBody
	public String alterStatuing(int rfid) {
		int row = hs.alterResumeStatuIng(rfid);
		System.out.println("row"+row+"rfid:"+rfid);
		if(row>0)
			return "正在审核中，请耐心等待";
		else
			return "出错，请重试";
	}
	
	//点击聘任时触发审核已通过
	@GetMapping("/alterstatupass")
	@ResponseBody
	public String alterStatupass(int rfid) {
		String message="您的简历已通过，请关注面试信息";
		System.out.println(message);
		//hs.alterResumeStatuPass();
		mapper.alterResumeStatuToPass(rfid);
		return message;
	}
	
	//不想聘任此人触发审核不通过
	@GetMapping("/alterstatunot")
	@ResponseBody
	public String alterStatunot(int rfid) {
		//hs.alterResumeStatuNot();
		mapper.alterResumeStatuNotPass(rfid);
		return "您的简历不符合该公司要求";
	}

}

